home *** CD-ROM | disk | FTP | other *** search
- .\" Sccs id goes here
- '\"macro stdmacro
- .\" Copyright (c) 1995, Sun Microsystems, Inc.
- .\" All Rights Reserved
- .nr X
- .TH pam 3 "19 October 1995"
- .SH NAME
- PAM \- Pluggable Authentication Module
- .SH SYNOPSIS
- .LP
- .nf
- .ft 3
- #include <security/pam_appl.h>
- .ft
- .fi
- .LP
- .B cc
- .RI "[ " "flag" " \|.\|.\|. ] " "file" " \|.\|.\|."
- .B \-lpam
- .RI "[ " "library" " \|.\|.\|. ]"
- .LP
- .SH DESCRIPTION
- .IX "PAM" "" "\fLPAM\fP \(em Pluggable Authentication Module"
- .PP
- .B PAM
- gives system administrators the flexibility of choosing any authentication
- service available on the system to perform authentication. The framework
- also allows new authentication service modules to be plugged in and made
- available without modifying the applications.
-
- The
- .B PAM
- framework,
- .B libpam,
- consists of an interface library and multiple authentication
- service modules. The
- .B PAM
- interface library is the layer implementing the
- Application Programming Interface (API). The authentication service modules
- are a set of dynamically loadable objects invoked by the
- .B PAM
- API to provide a particular type of user authentication.
- .SS Interface Overview
- The
- .B PAM
- library interface
- consists of functions which can be grouped into five categories. The
- names for all the authentication library functions start with
- .B pam_.
- .PP
- The first category contains functions for establishing and terminating an
- authentication activity
- .B (pam_start(3)
- and
- .B pam_end(3)),
- functions to maintain module specific data
- .B (pam_[sg]et_data(3)),
- functions to maintain state information
- .B (pam_[sg]et_item(3)),
- and a function to return error status information
- .B (pam_strerror(3)).
- .PP
- The second category contains functions to authenticate an individual user
- .B (pam_authenticate(3))
- and to set the credentials of the user
- .B (pam_setcred(3)).
- .PP
- The third category contains functions to do account management
- .B (pam_acct_mgmt(3)).
- This includes checking for password aging and access-hour restrictions.
- .PP
- The fourth category contains functions to perform session management
- .B (pam_open_session(3)
- and
- .B (pam_close_session(3))
- after access to the system has been granted.
- .PP
- The fifth category consists of functions to change authentication tokens
- .B (pam_chauthtok(3)).
- An authentication token is the object used to verify the
- identity of the user. In UNIX, an authentication
- token is a user's password.
- .PP
- All the
- .B pam_*()
- interfaces are implemented through the library
- .B libpam.
- For each of the categories listed above, excluding the first category
- .B (pam_start(), pam_end(),
- .B pam_[sg]et_data(),
- .B pam_[sg]et_item(),
- and
- .B pam_strerror())
- there exists a dynamically loadable shared module that provides the appropriate
- service layer functionality upon demand. The functional entry points in the
- service layer start with the
- .B pam_sm_
- prefix. The only difference between the
- .B pam_sm_*()
- interfaces and their corresponding
- .B pam_
- interfaces is that all the
- .B pam_sm_*()
- interfaces require extra parameters to pass service specific options
- to the shared modules.
- Please refer to
- .BR pam_sm(3)
- for an overview of the PAM service module APIs.
-
- .SS Stateful Interface
- A sequence of calls sharing a common set of state information
- is referred to as an authentication transaction. An authentication
- transaction begins with a call to
- .B pam_start(). pam_start()
- allocates space, performs various initialization activities,
- and assigns a PAM authentication handle to be used for subsequent calls
- to the library.
-
- After initiating an authentication transaction, applications can invoke
- .B pam_authenticate()
- to authenticate a particular user, and
- .B pam_acct_mgmt()
- to perform system entry management (the
- application may want to determine if the user's
- password has expired).
-
- If the user has been successfully authenticated, applications call
- .B pam_setcred()
- to set any user credentials associated with the authentication service.
- The calls to
- .B pam_start(),
- .B pam_authenticate()
- and
- .B pam_setcred()
- must be made with the same authentication handle
- returned by
- .B pam_start().
- This is necessary because during the call to
- .B pam_authenticate(),
- service modules may store module-specific data in the handle
- that is intended for use by
- .B pam_setcred().
-
- To perform session management, applications call
- .B pam_open_session().
- For example, the system may want to store
- the total time for the session. The function
- .B pam_close_session()
- closes the current session.
-
- When necessary, applications can call
- .B pam_get_item()
- and
- .B pam_set_item()
- to access and update specific authentication information.
- Such information may include the current username.
-
- To terminate an authentication transaction, the application simply calls
- .B pam_end(),
- which frees previously allocated space used to store authentication information.
- .PP
- .SS Application - Authentication Service Interactive Interface
- The authentication service in
- .B PAM
- does not communicate directly with the user; instead it
- relies on the application to perform all such interactions.
- The application passes a pointer to the function,
- .B conv(),
- along with any associated application data pointers, through a
- .IR pam_conv
- structure to the authentication service when it initiates
- an authentication transaction (via a call to
- .B pam_start()).
- The service will then use the function
- .B (conv())
- to prompt the user for data,
- output error messages, and display text information. Refer to
- .B pam_start(3)
- for more information.
-
- .SS Stacking Multiple Schemes
- The
- .B PAM
- architecture enables authentication by multiple authentication services through
- .I stacking.
- System entry applications, such as
- .B login(1),
- stack multiple service modules to authenticate users with multiple
- authentication services. The order in which authentication service
- modules are stacked is specified in the configuration file,
- .B pam.conf(4).
- A system administrator determines this ordering, and also determines
- whether the same password can be used for all authentication services.
-
- .SS Administrative Interface
- The authentication libraries,
- .B /usr/lib/libpam.so.1
- and
- .B /usr/lib/libpam.a,
- implement the framework interface. Various authentication services are
- implemented by their own loadable modules whose paths are specified through the
- .B pam.conf(4)
- file.
- .PP
- .SH "RETURN VALUES"
- .PP
- The
- .B PAM
- functions may return one of the following generic values,
- or one of the values defined in the specific man pages:
- .RS
- .IP "PAM_SUCCESS" 22
- Successful function return
- .IP "PAM_OPEN_ERR" 22
- Dlopen() failure when dynamically loading a service module
- .IP "PAM_SYMBOL_ERR" 22
- Symbol not found
- .IP "PAM_SERVICE_ERR" 22
- Error in service module
- .IP "PAM_SYSTEM_ERR" 22
- System error
- .IP "PAM_BUF_ERR" 22
- Memory buffer error
- .IP "PAM_CONV_ERR" 22
- Conversation failure
- .IP "PAM_PERM_DENIED
- Permission denied
- .RE
-
- .SH "SEE ALSO"
- .BR pam_authenticate (3),
- .BR pam_open_session (3),
- .BR pam_chauthtok (3),
- .BR pam_set_item (3),
- .BR pam_setcred (3),
- .BR pam_sm (3),
- .BR pam_start (3),
- .BR pam_strerror (3),
- .BR pam.conf (4)
- .SH WARNING
- Please note that all the PAM APIs and the data structures are subject to
- change without notice.
-